﻿using System;

namespace Lesson6_特殊的引用类型string
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 特殊的引用类型string
            //举例
            string str1 = "123";
            string str2 = str1;
            str2 = "321";

            Console.WriteLine(str1);
            Console.WriteLine(str2);
            //正常的引用类型变量 在赋值时不会在堆中重新分配空间 即仅仅改变值 不改变地址
            //string类型变量 在赋值时会在堆中重新分配空间 即不仅改变值 也改变地址
            //因此str2值的改变 不会影响str1的值

            //string的使用虽然方便 但频繁对string类型变量赋值 会导致堆中产生许多未被引用的值 成为内存垃圾
            //例如这里再次对str2变量赋值
            str2 = "456";
            //那么上一次赋给str2的值 "321" 就会不被任何一个变量引用 因为为str2重新分配了一个空间
            //这样就存储 "321" 值的空间被浪费 成为内存垃圾 产生性能浪费
            #endregion
        }
    }
}